import api from './api';
import systemDateTime from '@ohos.systemDateTime';
/**
 * Api管理抽象类
 */
export default  abstract class apiMagr{
  private cachedData:Map<string,Cache> = new Map<string,Cache>()
  private cachedTime = 300 //缓存时间，单位：s
  protected constructor() {

  }
  abstract getData(api:api)

  /**
   * 判断缓存是否有效
   * @param url 请求对应的url（包括query）
   * @returns true:缓存有效；false：缓存过期或者未缓存
   */
  protected async isCached(url:string):Promise<boolean>{
    if(!this.cachedData.has(url)){
      return false;
    }
    let data = this.cachedData.get(url)
    let now = await systemDateTime.getCurrentTime(false)
    if(data != undefined && (now-data.cacheTime)<=this.cachedTime){
      return true
    }
    return false
  }
  /**
   * 获取缓存数据
   * @param url 请求对应的url（包括query）
   * @returns 若已缓存且未过期，则返回对应的请求体；否则返回undefined
   */
  protected async getCache(url:string):Promise<Object|undefined>{
    let cacheFlag = await this.isCached(url)
    if(cacheFlag){
      return this.cachedData.get(url).data
    }else{
      return undefined
    }
  }
  /**
   * 更新缓存
   * @param url 请求对应的url（包括query）
   * @param data 对应的请求体数据
   */
  protected async updateCache(url:string,data:Object){
    let now = await systemDateTime.getCurrentTime(false)
    let cacheItem = {
      cacheTime:now,
      data
    }
    this.cachedData.set(url,cacheItem)
  }

}

interface Cache{
  cacheTime:number
  data:Object
}